home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Source Code
/
Pascal
/
Snippets
/
PNL Libraries
/
MyHandles.p
< prev
next >
Wrap
Text File
|
1996-10-02
|
3KB
|
95 lines
unit MyHandles;
interface
uses
Types, Memory;
type
HandleArray = ^Ptr;
function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
procedure HandleArrayDestroy (var hhhh: HandleArray);
function HandleArrayCount (hhhh: HandleArray): longint;
function HandleArrayGetSize (hhhh: HandleArray): longint;
function HandleArrayAppend (hhhh: HandleArray; data: Ptr): OSErr;
function HandleArrayInsert (hhhh: HandleArray; index: longint; data: Ptr): OSErr;
procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: Ptr);
procedure HandleArraySet (hhhh: HandleArray; index: longint; data: Ptr);
procedure HandleArrayDelete(hhhh: HandleArray; index: longint);
procedure HandleArrayReset (hhhh: HandleArray);
implementation
uses
OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory;
function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
var
err: OSErr;
begin
err := MNewHandle(hhhh, SizeOf(longint));
if err = noErr then begin
longintH(hhhh)^^ := size;
end;
HandleArrayCreate := err;
end;
procedure HandleArrayDestroy (var hhhh: HandleArray);
begin
MDisposeHandle( hhhh );
end;
procedure HandleArrayReset (hhhh: HandleArray);
begin
Assert(hhhh <> nil);
SetHandleSize(Handle(hhhh), SizeOf(longint));
end;
function HandleArrayCount (hhhh: HandleArray): longint;
begin
Assert(hhhh <> nil);
HandleArrayCount := (GetHandleSize(Handle(hhhh)) - SizeOf(longint)) div longintH(hhhh)^^;
end;
function HandleArrayGetSize (hhhh: HandleArray): longint;
begin
Assert(hhhh <> nil);
if GetHandleSize(Handle(hhhh)) > SizeOf(longint) then begin
HandleArrayGetSize := longintH(hhhh)^^;
end else begin
HandleArrayGetSize := -1;
end;
end;
function HandleArrayAppend (hhhh: HandleArray; data: Ptr): OSErr;
begin
Assert(hhhh <> nil);
HandleArrayAppend := PtrAndHand(data, Handle(hhhh), longintH(hhhh)^^);
end;
function HandleArrayInsert (hhhh: HandleArray; index: longint; data: Ptr): OSErr;
begin
Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh) + 1));
HandleArrayInsert := MMungerInsert(Handle(hhhh), SizeOf(longint) + (index - 1) * longintH(hhhh)^^, data, longintH(hhhh)^^);
end;
procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: Ptr);
begin
Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
BlockMoveData(Ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longintH(hhhh)^^), data, longintH(hhhh)^^);
end;
procedure HandleArraySet (hhhh: HandleArray; index: longint; data: Ptr);
begin
Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
BlockMoveData(data, Ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longintH(hhhh)^^), longintH(hhhh)^^);
end;
procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
begin
Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
MMungerDelete(Handle(hhhh), SizeOf(longint) + (index - 1) * longintH(hhhh)^^, longintH(hhhh)^^);
end;
end.